package net.mingsoft.examine.utils;

import java.lang.reflect.Array;
import java.util.*;

public class BlankUtil {
	/**
     * Function:判断字符串是否为空或零长
     * @param str 待检查的字符串变量
     * @return true  字符串为空或零长
     *         false 字符串不为空且不是零长字符串
     */
    public static boolean isBlank(final String str) {
        return (str == null) || (str.trim().length() <= 0);
    }

    /**
     * Function:判断字符是否为空或空格
     * @param cha 待检查的字符变量
     * @return true  字符为空或空格
     *         false 字符不为空且不是空格
     */
    public static boolean isBlank(final Character cha) {
        return (cha == null) || cha.equals(' ');
    }

    public static boolean isBlank(Integer i) {
        if(i == null || i == 0){
            return true;
        }
        return false;
    }

    public static boolean isBlank(Long i) {
        if (i == null ||  i <= 0) {
            return true;
        }
        return false;
    }

    public static boolean isBlank(Integer i, boolean notContainZero) {
        if(i == null){
            return true;
        }
        return false;
    }

    /**
     * Function:判断对象是否为空
     * @param obj 待检查的对象变量
     * @return true  对象为空
     *         false 对象不为空
     */
    public static boolean isBlank(final Object obj) {
        if (obj == null) {
            return true;
        }
        if (obj instanceof String && obj.toString().trim().length() == 0) {
            return true;
        }
        if (obj.getClass().isArray() && Array.getLength(obj) == 0) {
            return true;
        }
        if (obj instanceof Collection && ((Collection) obj).isEmpty()) {
            return true;
        }
        if (obj instanceof Map && ((Map) obj).isEmpty()) {
            return true;
        }
        return false;
    }

    /**
     * Function:判断对象数组是否为空或无元素
     * @param objs 待检查的对象数组变量
     * @return true  对象数组为空或无元素
     *         false 对象数组不为空且有元素
     */
    public static boolean isBlank(final Object[] objs) {
        if (objs == null || (objs.getClass().isArray() && Array.getLength(objs) == 0)) {
            return true;
        }
        return false;
    }

    /**
     * Function:判断集合对象是否为空或无元素
     * @param obj 待检查的集合对象变量
     * @return true  集合对象为空或无元素
     *         false 集合对象不为空且有元素
     */
    public static boolean isBlank(final Collection<?> obj) {
        return (obj == null) || (obj.size() <= 0);
    }

    /**
     * Function:判断Set对象是否为空或无元素
     * @param obj 待检查的Set对象变量
     * @return true  Set对象为空或无元素
     *         false Set对象不为空且有元素
     */
    public static boolean isBlank(final Set<?> obj) {
        return (obj == null) || (obj.size() <= 0);
    }

    /**
     * Function:判断Serializable对象是否为空
     * @param obj 待检查的Serializable对象变量
     * @return true  Serializable对象为空
     *         false Serializable对象不为空
     */
    /*public static boolean isBlank(final Serializable obj) {
        return obj == null;
    }*/

    /**
     * Function:判断Map对象是否为空或无元素
     * @param obj 待检查的Map对象变量
     * @return true  Map对象为空或无元素
     *         false Map对象不为空且有元素
     */
    public static boolean isBlank(final Map<?, ?> obj) {
        return (obj == null) || (obj.size() <= 0);
    }

    /**
     * Function:判断Map对象中是否有1-5的key
     * @param obj 待检查的Map对象变量
     * @return true  Map对象为空或无元素
     *         false Map对象不为空且有元素
     */
    public static List<Map<Object,Object>> isWeek(List<Map<Object,Object>> obj, Integer weekNum) {

        List<Integer> lists=new ArrayList<Integer>();
        for(Map<Object,Object> map:obj){
            for(Object key : map.keySet()){
                lists.add(Integer.parseInt(key.toString()));
            }
        }
        for(int i=1;i<(weekNum+1);i++){
            boolean b=true;
            for(Integer n:lists){
                if(i==n)
                    b=false;
            }
            if(b){
                Map<Object,Object> map=new HashMap<Object,Object>();
                map.put(i,null);
                obj.add(i-1,map);
            }
        }
        return obj;

    }
}
